﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;

namespace BAL.EstRec.FDVTotalRecurso
{
    public class CapFDVTotalRecurso : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;
        #region fields
        Recurso recurso;
        int _tiempoImplementacion;
        int _visitasSugeridas;
        string _iniciativas;
        int _numIniciativas;
        int _numRecursos;
        bool _isMaxCantRecursoRuleExceded;

        int _maxCantidadRecursoPermitido;
        #endregion

        #region  properties
        public Recurso Recurso
        {
            get { return recurso; }
            set
            {
                if (value != recurso)
                {
                    recurso = value;
                    if (this.PropertyChanged != null)
                    {
                        this.PropertyChanged(this, new PropertyChangedEventArgs("Recurso"));
                    }
                }
            }
        }

        public int TiempoImplementacion
        {
            get { return _tiempoImplementacion; }
            set
            {
                if (value != _tiempoImplementacion)
                {
                    _tiempoImplementacion = value;
                    if (this.PropertyChanged != null)
                    {
                        this.PropertyChanged(this, new PropertyChangedEventArgs("TiempoImplementacion"));
                    }
                }
            }
        }

        public int VisitasSugeridas
        {
            get { return _visitasSugeridas; }
            set
            {
                if (value != _visitasSugeridas)
                {
                    _visitasSugeridas = value;
                    if (this.PropertyChanged != null)
                    {
                        this.PropertyChanged(this, new PropertyChangedEventArgs("VisitasSugeridas"));
                    }
                }
            }
        }

        public string Iniciativas
        {
            get { return _iniciativas; }
            set
            {
                if (value != _iniciativas)
                {
                    _iniciativas = value;
                    if (this.PropertyChanged != null)
                    {
                        this.PropertyChanged(this, new PropertyChangedEventArgs("Iniciativas"));
                    }
                }
            }
        }

        public int NumIniciativas
        {
            get { return _numIniciativas; }
            set
            {
                if (value != _numIniciativas)
                {
                    _numIniciativas = value;
                    if (this.PropertyChanged != null)
                    {
                        this.PropertyChanged(this, new PropertyChangedEventArgs("NumIniciativas"));
                    }
                }
            }
        }

        public int NumRecursos
        {
            get { return _numRecursos; }
            set
            {
                if (value != _numRecursos)
                {
                    _numRecursos = value;
                    if (this.PropertyChanged != null)
                    {
                        this.PropertyChanged(this, new PropertyChangedEventArgs("NumRecursos"));
                    }
                }
            }
        }

        public bool IsMaxCantRecursoRuleExceded
        {
            get { return _isMaxCantRecursoRuleExceded; }
            set
            {
                if (value != _isMaxCantRecursoRuleExceded)
                {
                    _isMaxCantRecursoRuleExceded = value;
                    if (this.PropertyChanged != null)
                    {
                        this.PropertyChanged(this, new PropertyChangedEventArgs("IsMaxCantRecursoRuleExceded"));
                    }
                }
            }
        }

        public int MaxCantidadRecursoPermitido
        {
            get { return _maxCantidadRecursoPermitido; }
            set
            {
                if (value != _maxCantidadRecursoPermitido)
                {
                    _maxCantidadRecursoPermitido = value;
                    if (this.PropertyChanged != null)
                    {
                        this.PropertyChanged(this, new PropertyChangedEventArgs("MaxCantidadRecursoPermitido"));
                    }
                }
            }
        }
        #endregion

        public CapFDVTotalRecurso()
        { }

        public CapFDVTotalRecurso(Recurso r)
        {
            this.recurso = r;
        }

        public CapFDVTotalRecurso(Recurso r, int tiempoImplement, int visitasSug, int numIniciativas)
        {
            this.Recurso = r;
            this.TiempoImplementacion = tiempoImplement;
            this.VisitasSugeridas = visitasSug;
            this.NumIniciativas = numIniciativas;
            this._numRecursos = 0;
            this.CalculateIsMaxCantRecursoRuleExceded(r);
        }

        public CapFDVTotalRecurso(Recurso r, int tiempoImplement, int visitasSug, int numIniciativas, int numRecursos)
        {
            this.Recurso = r;
            this.TiempoImplementacion = tiempoImplement;
            this.VisitasSugeridas = visitasSug;
            this.NumIniciativas = numIniciativas;
            this._numRecursos = numRecursos;
            this.CalculateIsMaxCantRecursoRuleExceded(r);
        }

        private void CalculateIsMaxCantRecursoRuleExceded(Recurso r)
        {
            string idRecurso = r.idRecurso;
            FDVTotalRecursoRule maxCantRecRule = FDVTotalRecursoRule.getRule(idRecurso);
            this.MaxCantidadRecursoPermitido = maxCantRecRule.MaxCantRecursoPorTerritorio;

            if (this.NumRecursos > maxCantRecRule.MaxCantRecursoPorTerritorio)
            {
                this.IsMaxCantRecursoRuleExceded = true;
            }
            else this.IsMaxCantRecursoRuleExceded = false;

        }//
    }
}
